package com.excerise.poly.detail;

/**
 * 向上转型
 *
 * @author Way on 2021/8/3
 */
public class PolyTest {
    public static void main(String[] args) {
        // 向上转型：父类的引用指向子类的对象
        Animal animal = new Cat();

        // 此处是正确的，因为Object也是Cat类的父类
        Object obj = new Cat();

        // 可以调用父类中的所有成员（需要遵守访问权限）
        // 但是不能调用子类的特有成员
        // 因为在编译阶段，能调用哪些成员，是由编译类型来决定的
        // animal.catchMouse();

        // 最终运行效果看子类的具体实现
        animal.eat();
        animal.run();
        animal.show();
        animal.sleep();

        // 向下转型：子类类型 引用名 = (子类类型)父类引用
        Cat cat = (Cat) animal;
        cat.catchMouse();

        System.out.println("ok~~~");

        // 属性没有重写之说，属性的值看编译类型
        Base base = new Sub();
        System.out.println(base.count);
    }
}
